// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef MEDIA_BASE_MEDIA_OBSERVER_H_
#define MEDIA_BASE_MEDIA_OBSERVER_H_

#include "media/base/cdm_context.h"
#include "media/base/pipeline_metadata.h"
#include "url/gurl.h"

namespace media {

// This class is an observer of media player events.
class MEDIA_EXPORT MediaObserver {
public:
    MediaObserver();
    virtual ~MediaObserver();

    // Called when the media element entered/exited fullscreen.
    virtual void OnEnteredFullscreen() = 0;
    virtual void OnExitedFullscreen() = 0;

    // Called when the media element starts/stops being the dominant visible
    // content.
    virtual void OnBecameDominantVisibleContent(bool is_dominant) { }

    // Called when CDM is attached to the media element. The |cdm_context| is
    // only guaranteed to be valid in this call.
    virtual void OnSetCdm(CdmContext* cdm_context) = 0;

    // Called after demuxer is initialized.
    virtual void OnMetadataChanged(const PipelineMetadata& metadata) = 0;

    // Called to indicate whether the site requests that remote playback be
    // disabled. The "disabled" naming corresponds with the
    // "disableRemotePlayback" media element attribute, as described in the
    // Remote Playback API spec: https://w3c.github.io/remote-playback
    virtual void OnRemotePlaybackDisabled(bool disabled) = 0;

    // Called when the media is playing/paused.
    virtual void OnPlaying() = 0;
    virtual void OnPaused() = 0;

    // Called when a poster image URL is set, which happens when media is loaded
    // or the poster attribute is changed.
    virtual void OnSetPoster(const GURL& poster) = 0;
};

} // namespace media

#endif // MEDIA_BASE_MEDIA_OBSERVER_H_
